<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    // 数据类型的判断。
    
    // 使用 typeof 进行类型的判断。
    // typeof(1) -> number
    // typeof('1') -> string
    // typeof(true) -> boolean
    // typeof(null) -> object
    // typeof(undefined) -> undefined;
    // typeof(Symbol()) -> symbol
    // typeof(BigInt) -> function
    // typeof([1,2]) -> object
    // typeof(new Date()) -> object

    // 从以上的例子，我们能看出来，当我们使用 typeof 来进行类型判断的时候，基本数据类型 除了 null 和 BigInt 判断的不对之外，其他的都能准确的判断出。
    // 如果检测的是引用的数据类型，都是 object。
    // console.log(typeof(BigInt));


   // instanceof 来进行类型判断的时候，要注意写法，后面跟的是一个构造函数
   // 1 instanceof Number  -> false;
   // "1" instanceof String -> false;
   // [] instanceof Array -> true;
   // new Date() instanceof Date -> true;
   // {} instanceof Object -> true;
   
   // 在使用 instanceof 进行数据类型检测的时候，不能检测基本数据类型，能准确的检测出，引用数据类型的具体类型。
   // 特别注意：如果最后的构造函数为 Object 前面的引用数据类型不管是什么，都是 true；
//    console.log(new Date() instanceof Object);

// let a = [];
// console.log(a);

// constructor 来进行数据类型的检测
// let num = {};
//num=1 num.constructor == Number -> true;
//num="1" num.constructor == String -> true;
//num=true num.constructor == Boolean -> true;
//num=null num.constructor == null -> 报错
//num = undefined num.constructor == undefined -> 报错
//num = [] num.constructor == Array -> true;
//num = {} num.constructor == Object -> true;
// 通过上面的案例，我们观察发现，使用 constructor 来进行类型检验的时候，不能检验 null 和 undefined。
// console.log(num.constructor == Object);


// Object.prototype.toString.call(); 万能的类型检验
// Object.prototype.toString.call(1) -> [object Number]
// Object.prototype.toString.call("1") -> [object String]
// Object.prototype.toString.call(null) -> [object Null]
// Object.prototype.toString.call(undefined) -> [object Undefined]
// Object.prototype.toString.call([]) -> [object Array]
// console.log(Object.prototype.toString.call([]));
// 通过上面的例子，我们不难发现，Object.prototype.toString.call() 能检验出所有的类型。

// console.log(window);
// 内置对象，自定义对象，浏览器对象。

// js 本身带的对象,我们称为内置对象。
// Math 就是内置对象
// Array 也是内置对象
// console.log(window);
</script>